package com.cskaoyan.javase.oop1._11static._1basic;

/**
 * 宠物公司新进了一批同样颜色的猫，创建一个类描述这批宠物
 * 注：创建该类时，给出一个静态成员变量和一个静态成员方法
 *
 * static修饰成员的原理:
 * static修饰的成员，称之为静态成员，包括静态成员变量和静态成员方法。
 * 静态成员的访问并不依赖于创建对象，可以直接通过类名访问，
 * 其原因在于随着类加载完毕，静态成员就存在，并且能够使用了！
 * 类加载过程中,给静态成员变量开辟内存空间,然后完成赋值
 * 类加载过程中,加载静态成员方法的指令,类加载结束,这个静态方法就可以调用了.
 *
 * 思考:
 *      访问一个类的静态成员,会不会触发类加载?
 *      是会的,访问类的静态成员,如果不类加载,那么这个静态成员从哪里来呢?所以访问类的静态成员,是一种触发类加载的时机
 *
 *      总结,目前学习过的触发类加载的时机:
 *          1.new对象
 *          2.启动main方法
 *          3.访问静态成员(方法和变量)
 *
 *    类加载只有一次，静态成员变量也只有一份且被类所有对象共享。
 *    静态成员在整个类的全局是独一份，是唯一的。
 *    但成员变量不是，只要创建一个对象，成员变量就有一份。
 *
 * @since 11:41
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        System.out.println(Cat.color);
    }
}
class Cat{
    static String color;
    int age;
    double price;

    public static void test(){}
    public void shout(){
        System.out.println("喵喵叫!");
    }
}